/*
 * @ author madman 
 * @ use 专题相关
 */

const ProjectModel = require('../../models/pages/project.model');
const CategoryModel = require('../../models/category/category.model');
const UploadModel = require('../../models/upload/upload.model');
const Utils = require('../utils');
const path = require('path');
var querystring = require('querystring');
const qiniu = require('../../middleware/qiniu');
class ProjectController {
    // 添加
    async add(ctx) {
        const _body = ctx.request.body
        const _params = Utils._params(_body)
        if (_body.goodsThumbId) {
            //组图第一张作为缩略图
            const _thumb = await UploadModel.findById({ _id: _body.goodsThumbId });
            if (_thumb) {
                _params.thumbnail = _thumb.imgPath[0].url
            }
        }
        const result = await ProjectModel.create(_params);
        if (result) {
            return ctx.success({ msg: '添加成功' });
        } else {
            return ctx.error({ msg: '添加失败' });
        }
    }
    // 更新
    async update(ctx) {
        const _body = ctx.request.body
        console.log(ctx.request.body)
        const _params = Utils._params(_body)
        _params.updataAt = new Date()
        if (_body.goodsThumbId) {
            _params.goodsThumbId = _body.goodsThumbId
        }
        const result = await ProjectModel.update({ _id: _body.id }, { $set: _params });
        if (result) {
            return ctx.success({ msg: '更新成功' });
        } else {
            return ctx.error({ msg: '更新失败' });
        }
    }
    // 查询
    async query(ctx) {
        const id = ctx.query.id
        // 查询关联分类和组图
        const options = [{
            path: 'thumbId',
            select: { '_id': 1, 'imgPath': 1 } // 关联组图过滤字段
        }, {
            path: 'goodsThumbId',
            select: { '_id': 1, 'imgPath': 1 } // 关联组图过滤字段
        }, {    
            path: 'category',
            select: { '_id': 1, 'id': 1, 'name': 1 } // 关联分类过滤字段
        }]
        let result = await ProjectModel.findOne({ _id: id }).populate(options);
        if (result) {
            return ctx.success({ data: result, msg: '查询成功' });
        } else {
            return ctx.error({ msg: '查询失败' });
        }
    }
    // 删除
    async delete(ctx) {
        const _id = ctx.query.id
        const Goods = await ProjectModel.findOne({ id: _id });
        const thumb = await UploadModel.findById({ _id: Goods.thumbId });
        if (thumb) {
            //遍历删除七牛云上的图片
            thumb.imgPath.forEach(item => {
                //images加哈希后的路径为KEY才能删除云上的内容
                const fileName = path.win32.basename(item.url);
                qiniu.client.delete('images/' + fileName, function(err) {
                    return ctx.success({ msg: '删除失败', err: err });
                })
            })
            //移除数据库保存的路径
            await UploadModel.remove({ _id: Goods.thumbId });
        } else {
            return ctx.error({ msg: '组图删除失败' });
        }
        const result = await ProjectModel.remove({ id: _id });
        if (result) {
            return ctx.success({ msg: '删除成功' });
        } else {
            return ctx.error({ msg: '删除失败' });
        }
    }
    // 删除组图
    async thumbnailDelete(ctx) {
        const _body = ctx.request.body
        const parent = await UploadModel.findById({ _id: _body._id })
        const _fileName = path.win32.basename(_body.files.url)
        if (!parent._id) {
            return ctx.error({ msg: '找不到组图关联ID' });
        } else {
            //单个删除数据库图片
            parent.imgPath.splice(_body.files, 1)
            //单个删除七牛云图片
            qiniu.client.delete('images/' + _fileName, function(err) {
                return ctx.success({ msg: '删除失败', err: err });
            })
            //更新图片表的路径
            const data = await UploadModel.update({ _id: _body._id }, { $set: { imgPath: parent.imgPath } })
            if (data) {
                return ctx.success({ msg: '删除成功' });
            } else {
                return ctx.error({ msg: '删除失败' });
            }
        }
    }
    /*
     * 批量删除方法
     */
    async batchdelete(ctx, name) {
        const arrids = ctx.request.body.arrids
        let result = await ProjectModel.remove({ id: { $in: arrids } })
        if (result) {
            return ctx.success({ msg: '删除成功' });
        } else {
            return ctx.error({ msg: '删除失败' });
        }
    }
    // 获取带分页列表
    async list(ctx) {
        const options = {
            name: 'pages/project',
            type: 'pop',
            sortType: 'sort',
            sortVal: '1',
            findField: {},
            populate: 'category',
            populateField: 'name'
        }
        let _options = {}
        let result = null
        if (ctx.query.name || ctx.query.category) {
            if (ctx.query.name) {
                options.findField.name = new RegExp(ctx.query.name, 'i')
            }
            if (ctx.query.category) {
                options.findField.category = ctx.query.category
            }
        }
        //从前端传来分页数
        if (ctx.query.limt) {
            options.limt = ctx.query.limt
        }
        //如果有ID说明是前端使用
        if (ctx.query.category && ctx.query.isWeb) {
            options.findField.isSelves = true //是否上架
        }
        result = await Utils.getPageList(ctx, options)
        //如果有ID说明是前端使用
        if (ctx.query.category && ctx.query.isWeb) {
            const typeName = await CategoryModel.findById({ _id: ctx.query.category })
            _options.typeName = typeName.name
            _options.body = result
        }
        if (result) {
            return ctx.success({
                data: ctx.query.category && ctx.query.isWeb ? _options : result,
                msg: '查询成功'
            });
        }
    }

}

export default new ProjectController;